package string;

public class stringDemo3 {
    public static void main(String[] args) {
//  目标：搞清楚String使用时的几个注意事项
//  1.String的对象是不可变的
//        注意：只要是以 ”.." 方式出现的字符串对象，会在堆内存中的字符串常量池中存储

        String name = "黑马";
        name += "程序员";  // name = name + "程序员"
        name += "哈哈";
        System.out.println(name);

//  结论：每次试图改变字符串对象实际上是新产生了新的字符串对象了，变量每次都是指向了新的字符串对象，之前字符串对象的内容确实是没有改变的，因此说String的对象是不可变的

//  2.只要是以双引号给出的字符串对象，存储在常量池中，而且内容相同时只会存储一份
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2); // true s1和s2 的存储地址是相同的

//  3. new String 创建字符串对象，每次new出来的都是一个新对象，放在堆内存中
        char[] chars = {'a', 'b', 'c'};
        String a1 = new String(chars);
        String a2 = new String(chars);
        System.out.println(a1 == a2); // false a1和a2 的存储地址是不相同的

        String c1 = "abc";
        String c2 = "a" + "b" + "c";
        System.out.println(c1 == c2);


    }
}
